#include <iostream>
#include <queue>
#include <cstdio>
using namespace std;

struct Node
{
    int x, y, z;
};

int dir[6][3] = {{0, 0, -1}, {0, 0, 1}, {1, 0, 0}, {0, 1, 0}, {-1, 0, 0}, {0, -1, 0}};
int map[1500][150][70];
int m, n, l, t, ans;

bool in(int x, int y, int z)
{
    return x >= 0 && x < m && y >= 0 && y < n && z >= 0 && z < l;
}

void dfs(int x, int y, int z)
{
    int total = 0;
    queue<Node> qu;
    map[x][y][z] = 0;
    qu.push({x, y, z});
    while (!qu.empty()){
        Node front = qu.front();
        qu.pop();
        total++;
        for (int i = 0; i < 6; i++){
            int tx = front.x + dir[i][0];
            int ty = front.y + dir[i][1];
            int tz = front.z + dir[i][2];
            if (in(tx, ty, tz) && map[tx][ty][tz]){
                map[tx][ty][tz] = 0;
                qu.push({tx, ty, tz});
            }
        }
    }
    if (total >= t)
        ans += total;
}

int main()
{
    scanf("%d %d %d %d", &m, &n, &l, &t);
    for (int i = 0; i < l; i++)
        for (int j = 0; j < m; j++)
            for (int k = 0; k < n; k++)
                scanf("%d", &map[j][k][i]);
    for (int i = 0; i < l; i++)
        for (int j = 0; j < m; j++)
            for (int k = 0; k < n; k++)
                if (map[j][k][i]){
                    dfs(j, k, i);
                }
    printf("%d", ans);
    return 0;
}